home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / c / amiexpress / source / doors / flagedit / flagedit.c next >
Encoding:
C/C++ Source or Header  |  1992-12-26  |  6.3 KB  |  308 lines

  1. #include <exec/types.h>
  2. #include <exec/exec.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include "work:romconf/doorheader.h"
  6. #include "AEDEFINES:defines.h"
  7. struct Commands Cmds;
  8. #define SM sendmessage
  9. #define sm sendmessage
  10. #define pm prompt
  11. #define PM prompt
  12. #define HK hotkey
  13. #define hk hotkey
  14. #define GU getuserstring
  15. #define sr StripReturn
  16.  
  17. char MenuLocal[]="DOORS:AEShell/Menu";
  18. void end();
  19. void GetLocal();
  20. void MoveIt();
  21. void DeleteIt();
  22. void CopyIt();
  23. void ListIt();
  24. void Help();
  25. void ViewIt();
  26. void DeterAccess();
  27. void MoveToNode();
  28. void RenameIt();
  29. void MakeIt();
  30. void DisplayError();
  31. void StripReturn();
  32. void ViewDesc();
  33.  char MasterFile[200];
  34. int Reserved(char *Str,char Filter[]);
  35. int MakeU=0;
  36. int MakeH=0;
  37. int Yes=0;
  38. void FlagThem();
  39. void MarkNumbers(char *str);
  40. long NumList[1000];
  41. int NumChoose[1000];
  42. void main(int argc,char *argv[]);
  43. void main(int argc,char *argv[])
  44. {
  45.   char CMD[200];
  46.   char CD[200];
  47.   char conf[200];
  48.   char BBS[200];
  49.   FILE *fi;
  50.   int i=0;
  51.   if(argc!=2)
  52.   {
  53.      printf("FlagFile v1.1, written by Joseph Hodge\n");
  54.      printf("Compatible with AmiExpress v1.1u+\n");
  55.      printf("This is a type 'X' door.\n");
  56.      exit(0);
  57.   }
  58.   Register(argv[1][0]-'0');
  59.   while(i<1000)
  60.   {
  61.     NumList[i]=-1L;
  62.     NumChoose[i]=-1;
  63.     i++;
  64.   }
  65.   GU(CMD,BB_LOCAL);
  66.   strcpy(BBS,CMD);
  67.   sprintf(CD,"%s>",CMD);
  68.   strcat(CMD,"Config1");
  69.   fi=fopen(CMD,"rb");
  70.   fread((APTR)&Cmds,sizeof(struct Commands),1,fi);
  71.   fclose(fi);
  72.   SM("FlagFile v1.1  written by Joseph Hodge",1);
  73.   ViewDesc(); 
  74.   ShutDown();
  75.   end();
  76. }
  77. void ViewDesc()
  78. {
  79.   FILE *fi;
  80.   char Dir[200];
  81.   char FileName[200];
  82.   char Date[10];
  83.   int ndir;
  84.   int Lines;
  85.   long TheDate;
  86.   int FoundDate;
  87.   long NumberFiles=0L;
  88.   int cline=0;
  89.   long Position;
  90.   long Ks;
  91.   long FileNum=0L;
  92.   char Numbers[200];
  93.   char Number[200];
  94.   BOOL GoodDate=FALSE;
  95.   strcpy(Numbers,"");
  96.   GU(Dir,DT_LINELENGTH);
  97.   Lines=atoi(Dir);
  98.   GU(Dir,BB_CONFLOCAL);
  99.   strcat(Dir,"ndirs");
  100.   fi=fopen(Dir,"r");
  101.   if(fi==NULL)
  102.   {
  103.     sm("Files are not supported in this conference.",1);
  104.     return;
  105.   }
  106.   fgets(Dir,80,fi); fclose(fi);
  107.   ndir=atoi(Dir);
  108.   sm("",1);
  109.   sprintf(Dir,"There are %d Dir listings in this conference.",ndir);
  110.   sm(Dir,1);
  111.   sm("Which Dir listing would you like to FlagFrom >:",0);
  112.   pm("",Dir,3);
  113.   if(atoi(Dir)>ndir || atoi(Dir)<1)
  114.   {
  115.     sm("",1);
  116.     sm("That Dir listing does not exist!",1);
  117.     return;
  118.   }
  119.   ndir=atoi(Dir);
  120.   GU(Dir,BB_CONFLOCAL);
  121.   sprintf(FileName,"%sdir%d",Dir,ndir);
  122.   sm("",1);
  123.   pm("Enter From Date mm-dd-yy or [RETURN]>:",Date,8);
  124.   if(strlen(Date)==8)
  125.   {
  126.      TheDate=atol(&Date[6])*365L+atol(Date)*32L+atol(&Date[3]);
  127.   }
  128.   else { TheDate=0; GoodDate=TRUE;}
  129.   fi=fopen(FileName,"r"); 
  130.   if(fi==NULL)
  131.   {
  132.     sm("Error! Cannot locate that directory listing.",1);
  133.     return;
  134.   }strcpy(MasterFile,FileName);
  135.   cline = Lines-3;
  136.   Position=ftell(fi);
  137.   sm("            num = Passed Test    num = Test Not Required",1);
  138.   sm("",1);
  139.  
  140.   while(fgets(Dir,180,fi)!=NULL)
  141.   {
  142.     if(!cline)
  143.     {
  144.       sm("Press [Return],Q)uit or FileNum seperated by commas",1);
  145.       pm(">:",Number,200);
  146.       if(Number[0]=='Q' || Number[0]=='q') { fclose(fi); break;}
  147.         
  148.       if(Number[0]!='\0')
  149.       {
  150.          MarkNumbers(Number);}
  151.          cline=Lines-3;
  152.       
  153.     }
  154.     else if(GoodDate)cline--;
  155.     
  156.     sr(Dir);
  157.    
  158.     if(Dir[25]=='-' && Dir[28]=='-' && Dir[27]!='-')
  159.     {
  160.       FileNum +=1L;
  161.       NumList[FileNum]=Position;
  162.       Ks=atol(&Dir[14])/1000;
  163.       if(Dir[13]=='P')
  164. sprintf(FileName,"%4d.%-13.13s%4dK%-9.9s%s",FileNum,Dir,Ks,&Dir[22],&Dir[32]);
  165.       else
  166. sprintf(FileName,"%4d.%-13.13s%4dK%-9.9s%s",FileNum,Dir,Ks,&Dir[22],&Dir[32]);
  167.  
  168.       if(TheDate<=atol(&Dir[29])*365L+atol(&Dir[23])*32L+atol(&Dir[26]))
  169.       GoodDate=TRUE;
  170.       if(GoodDate)
  171.       sm(FileName,1);
  172.     }
  173.     else if(GoodDate)sm(Dir,1);
  174.     Position=ftell(fi);
  175.   }
  176.    if(cline)
  177.     {
  178.       sm("Press [Return],or FileNum seperated by commas",1);
  179.       pm(">:",Number,200);
  180.       if(Number[0]!='\0')
  181.       {
  182.          MarkNumbers(Number);}
  183.          cline=Lines-3;
  184.       
  185.     }
  186.   
  187.   fclose(fi);
  188.   if(Yes) 
  189.   {
  190.     sm("Flagging Files, Please standby",1);
  191.     FlagThem();
  192.   }
  193. }
  194. void FlagThem()
  195. {
  196.    register int i;
  197.    FILE *fi;
  198.    char image[200];
  199.    char temp[200];
  200.    long Position;
  201.    fi=fopen(MasterFile,"rb");
  202.    i=1; while(i<1000)
  203.    {
  204.       if(NumChoose[i]==1)
  205.       {
  206.          
  207.          fseek(fi,NumList[i],SEEK_SET);
  208.          fgets(image,13,fi);
  209.          sr(image);
  210.          sprintf(temp,"flagged file [%3d%s",i,image);
  211.          sm(temp,1);
  212.          FlagFile(image);
  213.       }
  214.       i++;
  215.    }
  216.    fclose(fi);
  217. }
  218. void MarkNumbers(char *str)
  219. {
  220.   char Number[200];
  221.   register int i;
  222.   register int j;
  223.   register int k;
  224.   long num;
  225.   strcpy(Number,str);
  226.   i=0;
  227.   k=strlen(Number);
  228.   j=1;
  229.   while(i<k)
  230.   {
  231.     if(j) { num=atol(&Number[i]); 
  232.             if(num>0L && num<1000L)
  233.             {
  234.  
  235.               if(NumList[num]>-1L)
  236.               {
  237.                 NumChoose[num]=1; Yes=1;
  238.               }
  239.             }
  240.           }
  241.     if(Number[i]==',') j=1; else j=0;
  242.     i++;
  243.   }
  244. }
  245.   
  246. void DeterAccess()
  247. {
  248.   char NAME[200];
  249.   char CMD[200];
  250.   char FileName[200];
  251.   char Password[200];
  252.   FILE *fi;
  253.   register int i=0;
  254.   getuserstring(NAME,DT_NAME);
  255.   strupr(NAME);
  256.   strcpy(CMD,"DOORS:AEShell/CoSysops");
  257.   strcpy(FileName,CMD);
  258.   sm("Enter Password >:",0);
  259.   strcpy(Password,"");
  260.   i=0;
  261.   do
  262.   {
  263.      hk("",CMD); strupr(CMD);
  264.      if(CMD[0]!=13 && CMD[0]!='\0'){ strcat(Password,CMD);sm("X",0);}
  265.      i++;
  266.    }while(CMD[0]!=13 && CMD[0]!='\0' && i<20);
  267.    sm("",1);
  268.     fi=fopen(FileName,"r");
  269.     if(fi==NULL)
  270.     {
  271.      SM("You are not a CoSysop for this Bulletin Board.",1);
  272.       ShutDown();
  273.       end();
  274.     }
  275.     strcat(NAME,"-");
  276.     strcat(NAME,Password);
  277.     while(fgets(CMD,80,fi)!=NULL)
  278.     {
  279.       StripReturn(CMD);
  280.       strupr(CMD);
  281.       
  282.       if(!strcmp(NAME,CMD))
  283.       { 
  284.         SM("Access Authenticated.",1);
  285.         fclose(fi);
  286.         return;
  287.       }
  288.   }  
  289.   fclose(fi);
  290.   SM("Access Denied, Please consult the Sysop regarding Access.",1);
  291.   ShutDown();
  292.   end();  
  293. }
  294.  
  295. void StripReturn(char *str)
  296. {
  297.    register int i;
  298.    i=strlen(str);
  299.    while(i>0)
  300.    {
  301.       if(*(str+i)<32) *(str+i)='\0'; else return;
  302.       i--;
  303.    }
  304. }
  305. void end()
  306. {
  307.   exit(0);
  308. }